(function (mui, $) {
var _Data = {
	'token'       : app.store('token'),
	'page'        : 0,
	'nums'        : 99,
};

function next (cb) {
	var view = plus.webview.currentWebview();
	if (view.isVisible()) { plus.nativeUI.showWaiting(); }
	
	app.log('请求参数：', mui.extend({}, _Data, {'page':_Data.page + 1}));
	$.ajax({
		'dataType' : 'json',
		'type'     : 'post',
		'url'      : app.url('App/Cart/Index/lists'),
		'data'     : mui.extend({}, _Data, {'token':app.store('token'), 'page':_Data.page + 1}),
	})
	.fail(function (res) {
		// 失败回调
		plus.nativeUI.closeWaiting();
		app.log('加载得购物车失败：', res);
		app.toast('加载得购物车失败');
		app.tryResetPullLoading();
	})
	.done(function (res) {
		// 成功回调
		plus.nativeUI.closeWaiting();
		app.log('购物车：', res);
		
		if (500 == res.code) {
			if (!plus.webview.currentWebview().isVisible()) { return; }
			app.toast('你还未登录'); app.tryResetPullLoading(); return;
		}
		if (300 == res.code) { app.toast(res.msg); return; }
		if (200 != res.code) { app.toast('请求失败'); return; }
		if (res.msg && plus.webview.currentWebview().isVisible() && res.data) { app.toast(res.msg); }
		
		if (res.data && res.data.length) { _Data.page++; }
		cb && cb(res);
	})
	;
}
function call_on_pull_down () {
	var pullrefresh = mui('.container-pull-refresh').pullRefresh();
	_Data.page = 0;
	$('.cart-total').text('0.00');
	$(pullrefresh.element).find('.mui-scroll>.mui-table-view').empty();
	
	next (function (res) {
		var dom = $(pullrefresh.element).find('.mui-scroll>.mui-table-view');
		$(dom).append(app.tpl($(dom).attr('data-tpl'), res));
		pullrefresh.endPulldownToRefresh();
		//mui('.mui-numbox').numbox();
	});
}
function call_on_pull_up () {
	var pullrefresh = mui('.container-pull-refresh').pullRefresh();
	
	next (function (res) {
		var dom = $(pullrefresh.element).find('.mui-scroll>.mui-table-view');
		$(dom).append(app.tpl($(dom).attr('data-tpl'), res));
		pullrefresh.endPullupToRefresh();
		//mui('.mui-numbox').numbox();
	});
}
mui.init({
	pullRefresh   : {
		container : '.container-pull-refresh',
		down      : {callback : call_on_pull_down},
		//up        : {callback : call_on_pull_up},
	}
});

var cart  = window.cart = {};
cart.init = function () {
	_Data.token = app.store('token');
}
cart.refresh = function () {
	call_on_pull_down();
}
cart.add = function (data) {
	data = data || {};
	
	data.token              = app.store('token');
	data.goods_id           = data.id;
	data.goods_num          = data.quantity;
	data.goods_attr_val_ids = (data.sku || []).join(',');
	data.invitation         = data.invitation;
	
	plus.nativeUI.showWaiting('加入购物车...');
	app.log('加入购物车：', data);
	$.ajax({
		'dataType' : 'json',
		'type'     : 'post',
		'url'      : app.url('App/Cart/Index/create'),
		'data'     : data,
	})
	.fail(function (res) {
		// 失败回调
		plus.nativeUI.closeWaiting();
		app.toast('加入购物车失败');
		app.log('加入购物车失败：', res);
	})
	.done(function (res) {
		// 成功回调
		plus.nativeUI.closeWaiting();
		app.log('加入购物车：', res);
		
		if (500 == res.code) { app.toast('你还未登录'); return; }
		if (300 == res.code) { app.toast(res.msg); return; }
		if (200 != res.code) { app.toast('请求失败'); return; }
		if (res.msg) { app.toast(res.msg); } else { app.toast('加入购物车成功'); }
		
		cart.refresh();
	})
	;
}
cart.remove = function (data, cb) {
	plus.nativeUI.showWaiting('正在移除...');
	
	data.token = app.store('token');
	app.log('请求参数：', data);
	return $.ajax({
		'dataType' : 'json',
		'type'     : 'post',
		'url'      : app.url('App/Cart/Index/delete'),
		'data'     : data,
	})
	.fail(function (res) {
		// 失败回调
		plus.nativeUI.closeWaiting();
		app.toast('从购物车中移除商品失败');
		app.log('从购物车中移除商品失败：', res);
	})
	.done(cb || function (res) {
		// 成功回调
		plus.nativeUI.closeWaiting();
		app.log('移除商品：', res);
		
		if (500 == res.code) { app.toast('你还未登录'); return; }
		if (300 == res.code) { app.toast(res.msg); return; }
		if (200 != res.code) { app.toast('请求失败'); return; }
		if (res.msg) { app.toast(res.msg); }
		
		cart.refresh();
	})
	;
};
// 计算所有选中商品的总价
cart.total = function () {
	var total = 0;
	$('.cart-item input[type=checkbox]:checked').each(function (idx, item) {
		var dom   = $(item).closest('.cart-item');
		var price = parseInt($(dom).attr('data-price') || '0', 10);
		var num   = parseInt($(dom).find('[name=quantity]').val() || '0', 10);
		total    += (price * num);
	});
	$('.cart-total').text('￥'+(total / 100));
};


mui.plusReady(function () {
	setTimeout(cart.refresh, mui.os.android ? 1000 : 300);
});

// 查看商品详情
$('body').delegate('.cart-item .thumbnail img', 'tap', function () {
	var dom = $(this).closest('.cart-item');
	app.open('product.detail.html', {'id':$(dom).attr('data-product')});
});

// 从购物车移除某项商品
$('body').delegate('.btn-trash', 'tap', function (e) {
	e.stopPropagation();
	var dom = $(this).closest('.cart-item');
	
	cart.remove({'ids':$(dom).attr('data-cart')}, function (res) {
		// 成功回调
		plus.nativeUI.closeWaiting();
		app.log('移除商品：', res);
		
		if (500 == res.code) { app.toast('你还未登录'); return; }
		if (300 == res.code) { app.toast(res.msg); return; }
		if (200 != res.code) { app.toast('请求失败'); return; }
		if (res.msg) { app.toast(res.msg); }
		
		$(dom).closest('.cart-item').remove();
		
		cart.total();
	});
});

// 全选操作
$('.checkout-row .mui-checkbox>input').on('change', function () {
	$('.container-pull-refresh .cart-item [name=product]').prop('checked', $(this).prop('checked'));
	
	cart.total();
});
// 选中或取消选中某个商品
$('body').delegate('.cart-item [name=product]', 'change', function (e) {
	e.stopPropagation();
	setTimeout(cart.total, 100);
});

// 修改商品的数量
function modify_quantity (dom, cb) {
	var dom  = $(dom).closest('.cart-item');
	var cid  = $(dom).attr('data-cart'), quantity = parseInt($(dom).find('input[name=quantity]').val(), 10);
	var prev = parseInt($(dom).find('input[name=quantity]').attr('data-quantity'), 10);
	
	if (prev == next) { return; }
	
	document.activeElement.blur();
	$(dom).find('button').prop('disabled', true);
	
	app.log('请求数据：', {'token':app.store('token'), 'data':{'id':cid, 'goods_nums':quantity}});
	$.ajax({
		'dataType' : 'json',
		'type'     : 'post',
		'url'      : app.url('App/Cart/Index/update'),
		'data'     : {'token':app.store('token'), 'data':{'id':cid, 'goods_nums':quantity}},
	})
	.fail(function (res) {
		app.log('更新购物车数量失败：', res);
		app.toast('更新购物车数量失败');
		$(dom).find('button').prop('disabled', false);
	})
	.done(function (res) {
		app.log('更新购物车数量成功：', res);
		$(dom).find('button').prop('disabled', false);
		
		// 还原数量
		if (200 != res.code) { $(dom).find('input[name=quantity]').val(prev); }
		
		if (500 == res.code) { app.toast('你还未登录'); return; }
		if (300 == res.code) { app.toast(res.msg); return; }
		if (200 != res.code) { app.toast('请求失败'); return; }
		if (res.msg) { app.toast(res.msg); }
		
		// 缓存新的数量
		$(dom).find('input[name=quantity]').attr('data-quantity', quantity);
		// 更新总额
		if ($(dom).find('input[type=checkbox]').is(':checked')) {
			setTimeout(cart.total, 100);	
		}
		// 执行回调
		cb && cb(res);
	})
	;
}
// 手动修改某项商品数量
$('body').delegate('.cart-item [name=quantity]', 'keyup', function () {
	// 删除所有数字。（如果是不再输入了，在blur里面处理）
	//if (!$(this).val()) { return; }
	// 执行更新操作
	//modify_quantity (this);
});
$('body').delegate('.cart-item [name=quantity]', 'blur', function () {
	modify_quantity (this);
});
// 更新购物车中的商品数量
$('body').delegate('.mui-numbox>.mui-numbox-btn-minus', 'tap', function () {
	var ipt = $(this).next();
	$(ipt).val( 1 * $(ipt).val() - 1 );
	modify_quantity (this);
});
$('body').delegate('.mui-numbox>.mui-numbox-btn-plus', 'tap', function () {
	var ipt = $(this).prev();
	$(ipt).val( 1 * $(ipt).val() + 1 );
	modify_quantity (this);
});

// 去结算
$('.btn-go-checkout').on('tap', function () {
	var data = {
		'ids'                : '',// 购物车ID
		'cart_ids'           : [],// 购物车ID
		'goods_id'           : '',// 商品ID
		'goods_attr_val_ids' : '',// 商品规格
		'goods_num'          : 1, // 商品数量
	};
	$('.cart-item input[type=checkbox]:checked').each(function (idx, item) {
		var dom = $(item).closest('.cart-item');
		data.cart_ids.push($(dom).attr('data-cart'));
	});
	data.ids = data.cart_ids.join(',');
	if (data.cart_ids.length == 0) { alert('请至少选择一个商品'); return; }
	
	app.open('checkout.html', data)
});


})(mui, $);
